package com.huanbao.nongwu.controller;

import com.alibaba.fastjson.JSON;
import com.huanbao.common.api.CommonResult;
import com.huanbao.common.exception.BusinessException;
import com.huanbao.common.pojo.nwrabc.SysMenu;
import com.huanbao.common.pojo.nwrabc.SysRole;
import com.huanbao.common.pojo.nwrabc.SysRoleMenu;
import com.huanbao.nongwu.pojo.RoleForm;
import com.huanbao.nongwu.service.SysMenusServiceImpl;
import com.huanbao.nongwu.service.SysRoleServiceImpl;
import com.huanbao.nongwu.service.SysUserServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;

/* ━━━━━━佛祖保佑━━━━━━
 *                  ,;,,;
 *                ,;;'(    社
 *      __      ,;;' ' \   会
 *   /'  '\'~~'~' \ /'\.)  主
 * ,;(      )    /  |.     义
 *,;' \    /-.,,(   ) \    码
 *     ) /       ) / )|    农
 *     ||        ||  \)
 *     (_\       (_\
 * ━━━━━━永无BUG━━━━━━
 * @author ：zjq
 * @date ：2021/3/24 14:42
 * @description: TODO
 * @version: V1.0
 * @slogan: 天下风云出我辈，一入代码岁月催
 */
@RestController
@RequestMapping("role")
public class RoleController {

    @Autowired
    private SysRoleServiceImpl irolesService;

    @Autowired
    private SysMenusServiceImpl iSysMenusService;


    /**
     * 查询所有角色
     */
    @RequestMapping("/getAllRole")
    public CommonResult getAllRole() throws BusinessException {
        List<SysRole> allRoles = irolesService.getAllRoles();
        return CommonResult.success(allRoles);
    }

    /**
     * 新增角色
     */
    @RequestMapping("/addnewrole")
    @Transactional(rollbackFor = Exception.class)
    public CommonResult addNewRole(@RequestBody RoleForm roleForm) throws Exception {
        SysRole sysRole = new SysRole();
        sysRole.setName(roleForm.getName());
        int roleCount = irolesService.insert(sysRole);

        if (roleCount != 1) {
            throw new BusinessException("插入新角色失败");
        }

        //根据用户名获取用户id，用户查询
        SysRoleMenu sysRoleMenu = new SysRoleMenu();

        //循环插入信息，这里应该用mybatis内置的功能，今后优化
        for (int i = 0; i < roleForm.getMeunIds().size(); i++) {
            sysRoleMenu.setMenuid(roleForm.getMeunIds().get(i));
            sysRoleMenu.setRoleid(sysRole.getId());
            int count2 = irolesService.insertRoleMenu(sysRoleMenu);
            if (count2 != 1) {
                throw new BusinessException("插入新角色失败");
            }
        }

        return CommonResult.success();

    }


    /**
     * 跟新用户角色的时候所能够看到的目录，只能分配自己能看到的目录。而不能分配所有目录
     *
     */
    @RequestMapping("/getupdatauserrolesmenus")
    public CommonResult updatauserroles(int roleid) {
        //查询 用户能看到的 目录
        List<SysMenu> userMenus = iSysMenusService.getMenusByRoleId(roleid);

        //所有目录的数量肯定大于用户能看到的目录
        List<SysMenu> menus = iSysMenusService.getAllMenus();

        for (SysMenu menu : menus) {
            for (SysMenu userMenu : userMenus) {
                if (menu.getId().toString().equals(userMenu.getId().toString())) {
                    menu.setChecked(true);
                }
            }
        }
        return CommonResult.success();
    }

    /**
     *  修改角色
     *
     */
    @RequestMapping("/updaterole")
    public CommonResult updaterole(int roleid, @RequestBody RoleForm roleForm) {

        SysRole sysRole = new SysRole();
        sysRole.setId(roleid);
        sysRole.setName(roleForm.getName());

        int updatecount = irolesService.updateByPrimaryKeySelective(sysRole);
        //删除所有关联menuid
        int count = irolesService.deleteRoleMenuByRoleId(roleid);

        //根据用户名获取用户id，用户查询
        SysRoleMenu sysRoleMenu = new SysRoleMenu();

        //循环插入信息，这里应该用mybatis内置的功能，今后优化
        for (int i = 0; i < roleForm.getMeunIds().size(); i++) {
            sysRoleMenu.setMenuid(roleForm.getMeunIds().get(i));
            sysRoleMenu.setRoleid(roleid);
            int count2 = irolesService.insertRoleMenu(sysRoleMenu);
            if (count2 != 1) {
                throw new BusinessException("更新新角色失败");
            }
        }
        return CommonResult.success();
    }

}
